from pypinyin import pinyin, Style
import re


class RpPrefixGeneratorFc(object):
    """
    生成唯一前缀
    Param:
        - env: odoo env

    Function:
        - get_code: 获取编码
    """

    def __init__(self, env):
        self.env = env

    def get_code(self, name):
        """
        根据名称获取编码

        如果name中填入的是中文，则取前两个字的的拼音首字母大写拼接作为code
        如果name填入的中文只有一个字，不填写code
        如果name填入的是英文，则取前两个单词的首字母大写拼接作为code
        如果name填入的英文只有一个单词，则取前两个字母大写作为code

        :param name: 名称(str)

        @return code(str)
        """
        # 判断是否为中文的正则表达式
        if re.search("[\u4e00-\u9fa5]", name):
            # 处理中文逻辑
            if len(name) >= 2:
                # 取前两个中文字符的首字母并大写
                return ''.join([word[0][0].upper() for word in pinyin(name[:2], style=Style.NORMAL)])
            else:
                # 中文字符不足两个，不填写code
                return ''
        else:
            # 处理英文逻辑
            words = name.split()
            if len(words) >= 2:
                # 取前两个单词的首字母并大写
                return ''.join([word[0].upper() for word in words[:2]])
            else:
                # 只有一个单词，取前两个字母并大写
                return name[:2].upper()
